/* 
 * File:   udp.h
 * Author: geraldo
 *
 * Created on 11 de Dezembro de 2011, 22:45
 */

#ifndef UDP_H
#define	UDP_H

#include <netinet/in.h> //sockaddr

#include "defines.h"

int udpsockfd;
ipaddr localip;
u_short localport;
/**
 * Cria o socket udp
 */
void init_udp(u_short my_port);
/**
 * Fecha o socket udp
 */
void destroy_udp();
ipaddr get_local_ip();
/**
 * Monta uma estrutura sockaddr a partir do endereco ip
 * e da porta passados
 * @param my_ip endereco ip
 * @param my_port porta
 * @return estrutura sockaddr
 */
struct sockaddr* get_addr(ipaddr my_ip, u_short my_port);
struct sockaddr* get_addr_ipstr(const char* my_ipstr, u_short my_port);

/**
 * Envia uma mensagem via UDP
 * @param ip_dst ip de destino
 * @param port_dst porta de destino
 * @param msg mensagem a ser enviada
 * @param length tamanho da mensagem
 * @return 0 em caso de sucesso, -1 em caso de erro
 */
int udpsend(ipaddr ip_dst, u_short port_dst, void* msg, int length);
int udpsend_ipstr(const char* ipstr_dst, u_short port_dst, void* msg, int length);
/**
 * Recebe uma mensagem via UDP (Recvfrom)
 * @param ip_src ip de origem
 * @param port_src porta de origem
 * @param msg buffer da mensagem
 * @param length tamanho do buffer
 * @return -1 em caso de erro, numero de bytes lidos em caso de sucesso
 */
int udprecv(ipaddr ip_src, u_short port_src, void* msg, int length);
int udprecv_ipstr(const char* ipstr_src, u_short port_src, void* msg, int length);

#endif	/* UDP_H */

